/**
 * @file    elog_cfg.h
 * @brief   EasyLogger配置头文件（示例）
 * @details 本文件提供了EasyLogger日志库的配置模板和参考设置
 *          用户应根据实际项目需求修改此文件中的配置项
 * 
 * @note    重要：移植时必须修改此文件以适配实际项目
 *          包含的配置项：
 *          - 基础输出配置（输出级别、断言等）
 *          - 缓冲区大小配置
 *          - 过滤器功能配置
 *          - 颜色输出配置
 *          - 格式化输出配置
 *          - 异步和缓冲输出配置
 */

#ifndef _ELOG_CFG_H_
#define _ELOG_CFG_H_

/* ---------------------------------------------- 基础输出配置 -------------------------------------------- */
/* 日志输出总开关 */
#define ELOG_OUTPUT_ENABLE                                                      /* 启用日志输出功能 */

/* 静态日志级别过滤（编译期确定，可减小代码体积） */
/* 只有级别 <= ELOG_OUTPUT_LVL 的日志才会被编译进代码 */
/* 可选值：ELOG_LVL_ASSERT / ERROR / WARN / INFO / DEBUG / VERBOSE */
#define ELOG_OUTPUT_LVL                          ELOG_LVL_VERBOSE               /* 输出所有级别 */
// #define ELOG_OUTPUT_LVL                       ELOG_LVL_INFO                  /* 仅输出INFO及以上 */

/* 断言功能开关 */
#define ELOG_ASSERT_ENABLE                                                      /* 启用断言检查 */

/* ---------------------------------------------- 缓冲区配置 ---------------------------------------------- */
/* 单行日志缓冲区大小（字节）*/
/* 建议值：128~512，根据日志内容长度调整 */
/* 注意：过大会占用较多栈空间，过小会导致日志截断 */
#define ELOG_LINE_BUF_SIZE                       256                            /* 单行日志缓冲区大小 */

/* 行号最大长度（位数）*/
/* 建议值：5（支持99999行），4（支持9999行）*/
#define ELOG_LINE_NUM_MAX_LEN                    5                              /* 行号最大长度 */

/* ---------------------------------------------- 过滤器配置 ---------------------------------------------- */
/* 标签名最大长度（字节）*/
/* 建议值：16~32，根据模块命名习惯调整 */
#define ELOG_FILTER_TAG_MAX_LEN                  30                             /* 标签名最大长度 */

/* 过滤关键字最大长度（字节）*/
#define ELOG_FILTER_KW_MAX_LEN                   16                             /* 过滤关键字最大长度 */

/* 标签级别过滤器最大数量 */
/* 说明：允许为多少个不同的标签设置独立的日志级别 */
/* 建议值：5~20，根据项目模块数量调整 */
#define ELOG_FILTER_TAG_LVL_MAX_NUM              5                              /* 标签级别过滤器最大数量 */

/* 换行符定义 */
/* Windows/串口工具："\r\n"  |  Linux/Unix："\n"  |  Mac OS 9："\r" */
#define ELOG_NEWLINE_SIGN                        "\r\n"                         /* 换行符定义 */

/* ---------------------------------------------- 颜色输出配置 -------------------------------------------- */
/* 颜色输出开关（使用ANSI颜色代码）*/
/* 注意：只有支持ANSI的终端才能正确显示颜色（如Linux终端、PuTTY等）*/
/*      普通串口工具（SecureCRT、Xshell等）需要启用ANSI支持 */
/*      嵌入式调试器（J-Link RTT Viewer等）可能不支持 */
#define ELOG_COLOR_ENABLE                                                       /* 启用颜色输出功能 */

/* 各级别日志颜色配置（仅在启用ELOG_COLOR_ENABLE时生效）*/
/* 颜色代码格式：(前景色 背景色 字体样式) */
/* 前景色：F_BLACK/RED/GREEN/YELLOW/BLUE/MAGENTA/CYAN/WHITE */
/* 背景色：B_NULL/BLACK/RED/GREEN/YELLOW/BLUE/MAGENTA/CYAN/WHITE */
/* 样式：S_NORMAL/BOLD/UNDERLINE/BLINK/REVERSE/HIDE */
#define ELOG_COLOR_ASSERT                        (F_MAGENTA B_NULL S_BOLD)      /* 断言：洋红色加粗 */
#define ELOG_COLOR_ERROR                         (F_RED B_NULL S_NORMAL)        /* 错误：红色 */
#define ELOG_COLOR_WARN                          (F_YELLOW B_NULL S_NORMAL)     /* 警告：黄色 */
#define ELOG_COLOR_INFO                          (F_CYAN B_NULL S_NORMAL)       /* 信息：青色 */
#define ELOG_COLOR_DEBUG                         (F_GREEN B_NULL S_NORMAL)      /* 调试：绿色 */
#define ELOG_COLOR_VERBOSE                       (F_BLUE B_NULL S_NORMAL)       /* 详细：蓝色 */

/* ---------------------------------------------- 格式化输出配置 ------------------------------------------ */
/* 格式化信息开关（控制__FILE__、__FUNCTION__、__LINE__等宏的使用）*/
/* 注意：这些宏在编译期展开，启用会增加代码体积 */
/*      可通过elog_set_fmt()动态控制运行时输出哪些信息 */

/* 函数名输出（__FUNCTION__）*/
#define ELOG_FMT_USING_FUNC                                                     /* 启用函数名输出格式化 */

/* 文件路径输出（__FILE__）*/
#define ELOG_FMT_USING_DIR                                                      /* 启用文件路径输出格式化 */

/* 行号输出（__LINE__）*/
#define ELOG_FMT_USING_LINE                                                     /* 启用行号输出格式化 */

/* ---------------------------------------------- 异步输出配置 -------------------------------------------- */
/* 异步输出模式开关（日志先缓存到缓冲区，后台线程定期输出）*/
/* 优点：不阻塞业务代码，提升性能 */
/* 缺点：需要RTOS支持，增加内存占用 */
#define ELOG_ASYNC_OUTPUT_ENABLE                                                /* 启用异步输出模式 */

/* 异步输出级别（低于等于此级别的日志使用异步输出）*/
/* 建议：高优先级日志（ASSERT/ERROR）用同步，其他用异步 */
#define ELOG_ASYNC_OUTPUT_LVL                    ELOG_LVL_ASSERT                /* 异步模式的最高输出级别 */

/* 异步输出缓冲区大小（字节）*/
/* 建议值：ELOG_LINE_BUF_SIZE * (10~50)，根据日志频率调整 */
#define ELOG_ASYNC_OUTPUT_BUF_SIZE               (ELOG_LINE_BUF_SIZE * 10)      /* 异步模式的缓冲区大小 */

/* 异步按行输出开关（每条日志独立输出，便于解析）*/
#define ELOG_ASYNC_LINE_OUTPUT                                                  /* 启用按行输出 */

/* 异步输出线程实现方式 */
/* 注意：根据实际使用的RTOS选择对应的实现 */
#define ELOG_ASYNC_OUTPUT_USING_PTHREAD                                         /* POSIX线程（Linux/Unix）*/
// 如使用其他RTOS，需要在elog_async.c中添加对应实现

/* ---------------------------------------------- 缓冲输出配置 -------------------------------------------- */
/* 缓冲输出模式开关（日志先缓存，调用elog_flush()时批量输出）*/
/* 优点：减少输出次数，适合高频日志场景 */
/* 缺点：需手动刷新，断电可能丢失缓冲区内容 */
#define ELOG_BUF_OUTPUT_ENABLE                                                  /* 启用缓冲输出模式 */

/* 缓冲输出缓冲区大小（字节）*/
/* 建议值：ELOG_LINE_BUF_SIZE * (10~50) */
#define ELOG_BUF_OUTPUT_BUF_SIZE                 (ELOG_LINE_BUF_SIZE * 10)      /* 缓冲输出模式的缓冲区大小 */

#endif /* _ELOG_CFG_H_ */
